﻿<?xml version="1.0" encoding="utf-8" ?>
<Recipe Name="CreateCustomProject" xmlns="http://schemas.microsoft.com/pag/gax-core"
                               xmlns:xi="http://www.w3.org/2001/XInclude" Bound="false">
  <DocumentationLinks>
    <Link Kind="Documentation" Caption="Project Types" Url="ms-help://MS.VSCC.v90/MS.VSIPCC.v90/ms.vssdk.v90/dv_vsintegration/html/263a084f-f97a-4e09-add7-f0e8a6a27daf.htm" />
  </DocumentationLinks>
  <xi:include href="../../Common/CommonTypeAliases.xml"
				xpointer="xmlns(gax=http://schemas.microsoft.com/pag/gax-core) xpointer(/gax:Types)" />
  <Caption>Create Custom Project</Caption>
  <Description>Create Custom Project</Description>
  <HostData>
    <Icon File="Resources\CustomProject.ico" />
    <CommandBar Menu="VSSDKAssistCustomProject"/>
  </HostData>
  <Arguments>
    <xi:include href="../../Common/CommonArguments.xml"
					  xpointer="xmlns(gax=http://schemas.microsoft.com/pag/gax-core) xpointer(/gax:Arguments/gax:Argument)" />
    <Argument Name="VSPackageProject" Type="EnvDTE.Project, EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Required="true">
      <ValueProvider Type="VSSDKAssist.Assets.ValueProviders.VisualStudio.CurrentlySelectedProjectValueProvider, VSSDKAssist.Assets"
                     Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="VSPackageCodeClass" Type="EnvDTE.CodeClass, EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Required="true">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.VSPackageCodeClassValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="VSPackageProjectNamespace" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(VSPackageProject.Properties.Item('DefaultNamespace').Value.ToString())"
                     Stage="OnBeginRecipe">
      </ValueProvider>
    </Argument>
    <Argument Name="DestinationFolder" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="CustomProjects"
                     Stage="OnBeginRecipe" />
    </Argument>
    <Argument Name="ProjectNamespace" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(VSPackageProjectNamespace).$(DestinationFolder)"
                     Stage="OnBeginRecipe">
        <MonitorArgument Name="VSPackageProjectNamespace"/>
        <MonitorArgument Name="DestinationFolder"/>
      </ValueProvider>
    </Argument>
    <Argument Name="CustomProjectAutomationTT">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.TTPathValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"
                     SubPath="CustomProject\Create"
                     TTFile="CustomProjectAutomation.tt">
      </ValueProvider>
    </Argument>
    <Argument Name="CustomProjectFactoryTT">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.TTPathValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"
                     SubPath="CustomProject\Create"
                     TTFile="CustomProjectFactory.tt">
      </ValueProvider>
    </Argument>
    <Argument Name="CustomProjectFileNodeTT">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.TTPathValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"
                     SubPath="CustomProject\Create"
                     TTFile="CustomProjectFileNode.tt">
      </ValueProvider>
    </Argument>
    <Argument Name="CustomProjectFileNodePropertiesTT">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.TTPathValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"
                     SubPath="CustomProject\Create"
                     TTFile="CustomProjectFileNodeProperties.tt">
      </ValueProvider>
    </Argument>
    <Argument Name="CustomProjectNodeTT">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.TTPathValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"
                     SubPath="CustomProject\Create"
                     TTFile="CustomProjectNode.tt">
      </ValueProvider>
    </Argument>
    <Argument Name="CustomProjectNodePropertiesTT">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.TTPathValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"
                     SubPath="CustomProject\Create"
                     TTFile="CustomProjectNodeProperties.tt">
      </ValueProvider>
    </Argument>
    <Argument Name="ProvideProjectFactoryAttributeTT">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.TTPathValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"
                     SubPath="CustomProject\Create"
                     TTFile="ProvideProjectFactoryAttribute.tt">
      </ValueProvider>
    </Argument>
    <Argument Name="RegisterProjectFactoryCallTT">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.TTPathValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"
                     SubPath="CustomProject\Create"
                     TTFile="RegisterProjectFactoryCall.tt">
      </ValueProvider>
    </Argument>    
    <Argument Name="ProjectNodeGuid" Type="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Required="true">
      <ValueProvider Type="VSSDKAssist.Assets.ValueProviders.Framework.GuidValueProvider, VSSDKAssist.Assets"
                     Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="ProjectFactoryGuid" Type="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Required="true">
      <ValueProvider Type="VSSDKAssist.Assets.ValueProviders.Framework.GuidValueProvider, VSSDKAssist.Assets"
                     Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="ProjectFileItemGuid" Type="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Required="true">
      <ValueProvider Type="VSSDKAssist.Assets.ValueProviders.Framework.GuidValueProvider, VSSDKAssist.Assets"
                     Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="ProjectFileNodePropertiesGuid" Type="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Required="true">
      <ValueProvider Type="VSSDKAssist.Assets.ValueProviders.Framework.GuidValueProvider, VSSDKAssist.Assets"
                     Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="ProjectNodePropertiesGuid" Type="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Required="true">
      <ValueProvider Type="VSSDKAssist.Assets.ValueProviders.Framework.GuidValueProvider, VSSDKAssist.Assets"
                     Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="LanguageExtension" Required="true">
      <ValueProvider Type="VSSDKAssist.Assets.ValueProviders.VisualStudio.CurrentlySelectedProjectLanguageValueProvider, VSSDKAssist.Assets"
               Stage="OnBeginRecipe">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectName" Required="true">
      <Converter Type="VSSDKAssist.Assets.Converters.CSharpIdentifierConverter, VSSDKAssist.Assets"/>
    </Argument>
    <Argument Name="ProjectFileExtension" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression=".myproj"
                     Stage="OnBeginRecipe">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectFriendlyName" Required="true"/>
    <Argument Name="ProjectDescription" Required="true"/>
    <Argument Name="ProjectFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName).$(LanguageExtension)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectAutomationName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName)Automation"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectAutomationFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectAutomationName).$(LanguageExtension)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectFactoryName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName)Factory"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectFactoryFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectFactoryName).$(LanguageExtension)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectFileNodeName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName)FileNode"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectFileNodeFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectFileNodeName).$(LanguageExtension)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectFileNodePropertiesName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName)FileNodeProperties"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectFileNodePropertiesFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectFileNodePropertiesName).$(LanguageExtension)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectNodeName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName)Node"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectNodeFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectNodeName).$(LanguageExtension)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectNodePropertiesName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName)NodeProperties"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectNodePropertiesFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectNodePropertiesName).$(LanguageExtension)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName).$(ProjectFileExtension)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="VsTemplateFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName).vstemplate"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="SourceIconFileName" Required="true">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.EmptyIconValueProvider, VSSDKAssist"
               ImageSize="Size16x16"
               Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="BitmapFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName)ImageList.bmp"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="BitmapDestinationFolder" Type="EnvDTE.ProjectItem, EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" Required="true">
      <ValueProvider Type="VSSDKAssist.Recipes.Common.ValueProviders.ResourcesFolderValueProvider, VSSDKAssist"
                     Stage="OnBeginRecipe"/>
    </Argument>
    <Argument Name="IconFileName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(ProjectName).ico"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="VsPackageClassName" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(VSPackageCodeClass.Name)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="AssemblyNamespace" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="$(VSPackageProject.Properties.Item('DefaultNamespace').Value.ToString())"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="ProjectNameFolderStructure" Required="true">
      <ValueProvider Type="Evaluator"
                     Expression="Templates\Projects\$(ProjectName)"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
    <Argument Name="CustomProjectNotExist" Type="System.Boolean" Required="true">
      <ValueProvider Type="VSSDKAssist.Recipes.CreateCustomProject.CustomProjectNotExistsValueProvider, VSSDKAssist"
                     ProjectName="ProjectBase"
                     Stage="OnBeforeActions">
      </ValueProvider>
    </Argument>
  </Arguments>
  <GatheringServiceData>
    <Wizard xmlns="http://schemas.microsoft.com/pag/gax-wizards" SchemaVersion="1.0">
      <Pages>
        <Page Type="VSSDKAssist.Recipes.CustomProject.CreateCustomProject.CreateCustomProjectCP1, VSSDKAssist"
              Height="200" Width="510">
          <Title>Specify custom project general properties</Title>
          <LinkTitle>Custom project general properties</LinkTitle>
        </Page>
        <Page Type="VSSDKAssist.Recipes.CustomProject.CreateCustomProject.CreateCustomProjectCP2, VSSDKAssist"
            Height="200" Width="510">
          <Title>Specify custom project UI properties 1</Title>
          <LinkTitle>Custom project UI properties 1</LinkTitle>
        </Page>
      </Pages>
    </Wizard>
  </GatheringServiceData>
  <Actions CoordinatorServiceType="VSSDKAssist.Recipes.Common.Coordinators.ConditionalExecutionProgressCoordinator, VSSDKAssist">
    <!--Create Folders-->
    <Action Name="GenerateProjectNameFolderStructure"
          Type="VSSDKAssist.Assets.Actions.VisualStudio.AddProjectFolderAction, VSSDKAssist.Assets"
          StatusMessage="Creating destination folders"
          WriteMessageToOutputWindow="true">
      <Input Name="FolderName" RecipeArgument="ProjectNameFolderStructure"/>
      <Output Name="FolderAdded" />
    </Action>
    <Action Name="GenerateDestinationFolder"
      Type="VSSDKAssist.Assets.Actions.VisualStudio.AddProjectFolderAction, VSSDKAssist.Assets">
      <Input Name="FolderName" RecipeArgument="DestinationFolder"/>
      <Output Name="FolderAdded" />
    </Action>
    <!--Create Classes-->
    <Action Name="GenerateCustomProjectAutomationContent"
          Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library"
          StatusMessage="Creating custom project classes"
          WriteMessageToOutputWindow="true">
      <Input Name="Template" RecipeArgument="CustomProjectAutomationTT"/>
      <Input Name="ProjectNamespace" RecipeArgument="ProjectNamespace"/>
      <Input Name="ProjectName" RecipeArgument="ProjectName"/>
      <Input Name="ProjectFileItemGuid" RecipeArgument="ProjectFileItemGuid"/>
      <Output Name="Content" />
    </Action>
    <Action Name="AddCustomProjectAutomationContent"
          Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromStringToProjectItemAction, VSSDKAssist.Assets"
          Open="true">
      <Input Name="Content" ActionOutput="GenerateCustomProjectAutomationContent.Content" />
      <Input Name="TargetFileName" RecipeArgument="ProjectAutomationFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateDestinationFolder.FolderAdded" />
    </Action>
    <Action Name="GenerateCustomProjectFactoryContent"
      Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library">
      <Input Name="Template" RecipeArgument="CustomProjectFactoryTT"/>
      <Input Name="ProjectNamespace" RecipeArgument="ProjectNamespace"/>
      <Input Name="ProjectFactoryName" RecipeArgument="ProjectFactoryName"/>
      <Input Name="ProjectNodeName" RecipeArgument="ProjectNodeName"/>
      <Input Name="ProjectFactoryGuid" RecipeArgument="ProjectFactoryGuid"/>
      <Input Name="VsPackageClassName" RecipeArgument="VsPackageClassName"/>
      <Output Name="Content" />
    </Action>
    <Action Name="AddCustomProjectFactoryContent"
          Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromStringToProjectItemAction, VSSDKAssist.Assets"
          Open="true">
      <Input Name="Content" ActionOutput="GenerateCustomProjectFactoryContent.Content" />
      <Input Name="TargetFileName" RecipeArgument="ProjectFactoryFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateDestinationFolder.FolderAdded" />
    </Action>
    <Action Name="GenerateCustomProjectFileNodeContent"
      Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library">
      <Input Name="Template" RecipeArgument="CustomProjectFileNodeTT"/>
      <Input Name="ProjectNamespace" RecipeArgument="ProjectNamespace"/>
      <Input Name="ProjectName" RecipeArgument="ProjectName"/>
      <Input Name="ProjectFileNodeName" RecipeArgument="ProjectFileNodeName"/>
      <Input Name="ProjectFileNodePropertiesName" RecipeArgument="ProjectFileNodePropertiesName"/>
      <Output Name="Content" />
    </Action>
    <Action Name="AddCustomProjectFileNodeContent"
          Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromStringToProjectItemAction, VSSDKAssist.Assets"
          Open="true">
      <Input Name="Content" ActionOutput="GenerateCustomProjectFileNodeContent.Content" />
      <Input Name="TargetFileName" RecipeArgument="ProjectFileNodeFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateDestinationFolder.FolderAdded" />
    </Action>
    <Action Name="GenerateCustomProjectFileNodePropertiesContent"
      Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library">
      <Input Name="Template" RecipeArgument="CustomProjectFileNodePropertiesTT"/>
      <Input Name="ProjectNamespace" RecipeArgument="ProjectNamespace"/>
      <Input Name="ProjectFileNodePropertiesGuid" RecipeArgument="ProjectFileNodePropertiesGuid"/>
      <Input Name="ProjectFileNodePropertiesName" RecipeArgument="ProjectFileNodePropertiesName"/>
      <Output Name="Content" />
    </Action>
    <Action Name="AddCustomProjectFileNodePropertiesContent"
          Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromStringToProjectItemAction, VSSDKAssist.Assets"
          Open="true">
      <Input Name="Content" ActionOutput="GenerateCustomProjectFileNodePropertiesContent.Content" />
      <Input Name="TargetFileName" RecipeArgument="ProjectFileNodePropertiesFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateDestinationFolder.FolderAdded" />
    </Action>
    <Action Name="GenerateCustomProjectNodeContent"
      Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library">
      <Input Name="Template" RecipeArgument="CustomProjectNodeTT"/>
      <Input Name="ProjectNamespace" RecipeArgument="ProjectNamespace"/>
      <Input Name="ProjectName" RecipeArgument="ProjectName"/>
      <Input Name="ProjectFactoryName" RecipeArgument="ProjectFactoryName"/>
      <Input Name="ProjectNodeGuid" RecipeArgument="ProjectNodeGuid"/>
      <Input Name="ProjectNodeName" RecipeArgument="ProjectNodeName"/>
      <Input Name="ProjectFileNodeName" RecipeArgument="ProjectFileNodeName"/>
      <Input Name="ProjectNodePropertiesName" RecipeArgument="ProjectNodePropertiesName"/>
      <Input Name="ProjectFileNodePropertiesName" RecipeArgument="ProjectFileNodePropertiesName"/>
      <Input Name="VsPackageClassName" RecipeArgument="VsPackageClassName"/>
      <Input Name="BitmapFileName" RecipeArgument="BitmapFileName"/>
      <Input Name="AssemblyNamespace" RecipeArgument="AssemblyNamespace"/>      
      <Output Name="Content" />
    </Action>
    <Action Name="AddCustomProjectNodeContent"
          Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromStringToProjectItemAction, VSSDKAssist.Assets"
          Open="true">
      <Input Name="Content" ActionOutput="GenerateCustomProjectNodeContent.Content" />
      <Input Name="TargetFileName" RecipeArgument="ProjectNodeFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateDestinationFolder.FolderAdded" />
    </Action>
    <Action Name="GenerateCustomProjectNodePropertiesContent"
      Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library">
      <Input Name="Template" RecipeArgument="CustomProjectNodePropertiesTT"/>
      <Input Name="ProjectNamespace" RecipeArgument="ProjectNamespace"/>
      <Input Name="ProjectNodePropertiesGuid" RecipeArgument="ProjectNodePropertiesGuid"/>
      <Input Name="ProjectNodePropertiesName" RecipeArgument="ProjectNodePropertiesName"/>
      <Output Name="Content" />
    </Action>
    <Action Name="AddCustomProjectNodePropertiesContent"
          Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromStringToProjectItemAction, VSSDKAssist.Assets"
          Open="true">
      <Input Name="Content" ActionOutput="GenerateCustomProjectNodePropertiesContent.Content" />
      <Input Name="TargetFileName" RecipeArgument="ProjectNodePropertiesFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateDestinationFolder.FolderAdded" />
    </Action>
    <!--Create template-->
    <Action Name="GenerateProjContent"
            Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library"
            Template="TT\common\CustomProject\Template\Proj.tt">
      <Output Name="Content" />
    </Action>
    <Action Name="AddProjContent"
            Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromStringToProjectItemAction, VSSDKAssist.Assets"
            Open="false">
      <Input Name="Content" ActionOutput="GenerateProjContent.Content" />
      <Input Name="TargetFileName" RecipeArgument="ProjFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateProjectNameFolderStructure.FolderAdded" />
      <Output Name="ProjectItem"/>
    </Action>
    <Action Name="SetBuildAction1"
      Type="VSSDKAssist.Recipes.Common.Actions.SetZipProjectBuildAction, VSSDKAssist">
      <Input Name="ProjectItem" ActionOutput="AddProjContent.ProjectItem"/>
    </Action>
    <Action Name="GenerateVsTemplateContent"
            Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library"
            Template="TT\common\CustomProject\Template\VsTemplate.tt">
      <Input Name="ProjectName" RecipeArgument="ProjectName"/>
      <Input Name="ProjectFriendlyName" RecipeArgument="ProjectFriendlyName"/>
      <Input Name="ProjectDescription" RecipeArgument="ProjectDescription"/>
      <Input Name="IconFileName" RecipeArgument="IconFileName"/>
      <Input Name="ProjFileName" RecipeArgument="ProjFileName"/>
      <Output Name="Content" />
    </Action>
    <Action Name="AddVsTemplateContent"
        Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromStringToProjectItemAction, VSSDKAssist.Assets"
        Open="false">
      <Input Name="Content" ActionOutput="GenerateVsTemplateContent.Content" />
      <Input Name="TargetFileName" RecipeArgument="VsTemplateFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateProjectNameFolderStructure.FolderAdded" />
      <Output Name="ProjectItem"/>
    </Action>
    <Action Name="SetBuildAction2"
      Type="VSSDKAssist.Recipes.Common.Actions.SetZipProjectBuildAction, VSSDKAssist">
      <Input Name="ProjectItem" ActionOutput="AddVsTemplateContent.ProjectItem"/>
    </Action>
    <Action Name="AddIconFile" Type="VSSDKAssist.Assets.Actions.VisualStudio.AddItemFromFileToProjectItemAction, VSSDKAssist.Assets"
        Open="false">
      <Input Name="SourceFileName" RecipeArgument="SourceIconFileName"/>
      <Input Name="TargetFileName" RecipeArgument="IconFileName"/>
      <Input Name="InputProjectItem" ActionOutput="GenerateProjectNameFolderStructure.FolderAdded"/>
      <Output Name="ProjectItem" />
    </Action>
    <Action Name="SetBuildAction3"
          Type="VSSDKAssist.Recipes.Common.Actions.SetZipProjectBuildAction, VSSDKAssist">
      <Input Name="ProjectItem" ActionOutput="AddIconFile.ProjectItem"/>
    </Action>
    <Action Name="AddBitmapStrip" Type="VSSDKAssist.Recipes.CustomProject.CreateCustomProject.AddBitmapStripAction, VSSDKAssist"
        Open="false">
      <Input Name="IconFileName" RecipeArgument="SourceIconFileName"/>
      <Input Name="BitmapFileName" RecipeArgument="BitmapFileName"/>
      <Input Name="InputProjectItem" RecipeArgument="BitmapDestinationFolder"/>
      <Output Name="ProjectItem" />
    </Action>
    <Action Name="SetBuildAction4"
      Type="VSSDKAssist.Assets.Actions.VisualStudio.SetProjectItemBuildAction, VSSDKAssist.Assets"
      BuildAction="prjBuildActionEmbeddedResource">
      <Input Name="ProjectItem" ActionOutput="AddBitmapStrip.ProjectItem"/>
    </Action>
    <Action Name="UpdateBaseClass"
       Type="VSSDKAssist.Recipes.CustomProject.CreateCustomProject.UpdatePackageBaseClassAction, VSSDKAssist"
       ExecuteCondition="$(CustomProjectNotExist)">
      <Input Name="CodeClass" RecipeArgument="VSPackageCodeClass"/>
    </Action>
    <Action Name="GenerateProvideProjectFactoryAttributeContent"
        Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library"
        StatusMessage="Adding custom project registration information"
        WriteMessageToOutputWindow="true">
      <Input Name="Template" RecipeArgument="ProvideProjectFactoryAttributeTT"/>
      <Input Name="ProjectNamespace" RecipeArgument="ProjectNamespace"/>
      <Input Name="ProjectName" RecipeArgument="ProjectName"/>
      <Input Name="ProjectFactoryName" RecipeArgument="ProjectFactoryName"/>
      <Input Name="ProjectFriendlyName" RecipeArgument="ProjectFriendlyName"/>
      <Input Name="ProjectFileExtension" RecipeArgument="ProjectFileExtension"/>
      <Output Name="Content" />
    </Action>
    <Action Name="AddProvideProjectFactoryAttribute"
            Type="VSSDKAssist.Recipes.Common.Actions.InsertAttributeToCodeClassAction, VSSDKAssist">
      <Input Name="CodeClass" RecipeArgument="VSPackageCodeClass"/>
      <Input Name="AttributeValue" ActionOutput="GenerateProvideProjectFactoryAttributeContent.Content"/>
    </Action>
    <Action Name="GenerateRegisterProjectFactoryCallContent"
        Type="Microsoft.Practices.RecipeFramework.VisualStudio.Library.Templates.TextTemplateAction, Microsoft.Practices.RecipeFramework.VisualStudio.Library">
      <Input Name="Template" RecipeArgument="RegisterProjectFactoryCallTT"/>
      <Input Name="ProjectNamespace" RecipeArgument="ProjectNamespace"/>
      <Input Name="ProjectFactoryName" RecipeArgument="ProjectFactoryName"/>
      <Output Name="Content" />
    </Action>
    <Action Name="AddRegisterProjectFactoryCall"
            Type="VSSDKAssist.Recipes.Common.Actions.AddRegisterProjectFactoryCallAction, VSSDKAssist">
      <Input Name="CodeClass" RecipeArgument="VSPackageCodeClass"/>
      <Input Name="CallContent" ActionOutput="GenerateRegisterProjectFactoryCallContent.Content"/>
    </Action>
    <!--Add custom project template-->
    <Action Name="UnfoldProjectTemplate"
          Type="VSSDKAssist.Recipes.CustomProject.CreateCustomProject.UnfoldCustomProjectTemplateAction, VSSDKAssist"
          StatusMessage="Adding project base"
          WriteMessageToOutputWindow="true"
          ProjectName="ProjectBase"
          ExecuteCondition="$(CustomProjectNotExist)">
      <Output Name="Project"/>
    </Action>
    <!--Create Key.snk-->
    <Action Name="CreateSnk"
          Type="VSSDKAssist.Recipes.Common.Actions.CreateSnkAction, VSSDKAssist"
          ExecuteCondition="$(CustomProjectNotExist)">
      <Input Name="Project" ActionOutput="UnfoldProjectTemplate.Project" />
    </Action>
    <!-- Add a references -->
    <Action Name="AddReference1"
            Type="VSSDKAssist.Assets.Actions.VisualStudio.VisualStudio.AddProjectReferenceAction, VSSDKAssist.Assets"
            ReferencedAssembly="Microsoft.VisualStudio.Shell.Design.dll"
            StatusMessage="Adding references"
            WriteMessageToOutputWindow="true"
            ExecuteCondition="$(CustomProjectNotExist)">
      <Input Name="ReferencedProject" ActionOutput="UnfoldProjectTemplate.Project"/>
      <Input Name="ReferringProject" RecipeArgument="VSPackageProject"/>
    </Action>
    <Action Name="AddReference2"
        Type="VSSDKAssist.Assets.Actions.VisualStudio.VisualStudio.AddProjectReferenceAction, VSSDKAssist.Assets"
        ReferencedAssembly="VSLangProj.dll"
        StatusMessage="Adding references"
        WriteMessageToOutputWindow="true">
      <Input Name="ReferringProject" RecipeArgument="VSPackageProject"/>
    </Action>
    <Action Name="AddReference3"
            Type="VSSDKAssist.Assets.Actions.VisualStudio.VisualStudio.AddProjectReferenceAction, VSSDKAssist.Assets"
            ReferencedAssembly="EnvDTE.dll">
      <Input Name="ReferringProject" RecipeArgument="VSPackageProject"/>
    </Action>
    <Action Name="AddReference4"
        Type="VSSDKAssist.Assets.Actions.VisualStudio.VisualStudio.AddProjectReferenceAction, VSSDKAssist.Assets"
        ReferencedAssembly="EnvDTE80.dll">
      <Input Name="ReferringProject" RecipeArgument="VSPackageProject"/>
    </Action>
    <Action Name="ReloadProject"
      Type="VSSDKAssist.Recipes.CustomProject.CreateCustomProject.ReloadProjectAction, VSSDKAssist"
      ExecuteCondition="$(CustomProjectNotExist)">
      <Input Name="Project" ActionOutput="UnfoldProjectTemplate.Project" />
    </Action>
  </Actions>
</Recipe>